93652b1ae5c99ec558edaeffd8672e4f25bd8f38,source/jetbrains/mps/helgins/inference/EquationManager.java,EquationManager,solveInequations,#,267

Before Change


    }

    //3. a->b, b->a => a = b
    for (SNode node : subtypingGraphVertices()) {
      Set<SNode> supertypes = mySubtypesToSupertypesMap.get(node);
      if (supertypes == null) continue;
      for (SNode supertype : new HashSet<SNode>(supertypes)) {
        Set<SNode> supertypesSupertypes = mySubtypesToSupertypesMap.get(supertype);

After Change



    //3. a->b, b->a => a = b
    for (SNode node : subtypingGraphVertices()) {
      Map<SNode,SNode> supertypes = mySubtypesToSupertypesMap.get(node);
      if (supertypes == null) continue;
      for (SNode supertype : new HashSet<SNode>(supertypes.keySet())) {
        Map<SNode,SNode> supertypesSupertypes = mySubtypesToSupertypesMap.get(supertype);
        if (supertypesSupertypes == null) continue;
        for (SNode supertypesSubtype : supertypesSupertypes.keySet()) {
          if (supertypesSubtype == node) {
            addEquation(node, supertype, supertypesSupertypes.get(supertypesSubtype));
          }
        }
      }
    }

    //4. {}->c->{S} => c = lcs({S})
    outer: for (SNode node : subtypingGraphVertices()) {
      if (node instanceof RuntimeTypeVariable) {
        Map<SNode,SNode> subtypes = mySupertypesToSubtypesMap.get(node);
        if (subtypes == null) continue;
        Set<SNode> concreteSubtypes = new HashSet<SNode>();
        Set<SNode> nodesToCheck = new HashSet<SNode>();
        for (SNode subtype : new HashSet<SNode>(subtypes.keySet())) {
          if (subtype instanceof RuntimeTypeVariable) {
            continue; // outer;
          }
          concreteSubtypes.add(subtype);
          nodesToCheck.add(subtypes.get(subtype));
          subtypes.remove(subtype);
          mySubtypesToSupertypesMap.get(subtype).remove(node);
        }